package cn.b.sky.message.service;

import cn.b.sky.message.model.*;
import cn.b.sky.message.model.condition.InstantMessageCondition;
import cn.b.sky.message.model.condition.MessageConfigCondition;

import java.util.List;
import java.util.Map;

public interface MessageService {

  /**
   * 
   * <strong>Title : sendMessage<br></strong>
   * <strong>Description : </strong>通过引用所配置的消息代码的方式发送<br> 
   * <strong>Create on : 2015-9-18 下午05:21:51<br></strong>
   * <p>
   * @param siteCode
   * @param messageCode
   * @param paramrters
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void sendMessage(String siteCode, String messageCode, Object[] paramrters);

  /**
   * 
   * <strong>Title : sendMessageToGivenUser<br></strong>
   * <strong>Description : </strong>发送消息给指定的人<br> 
   * <strong>Create on : 2016-9-8 下午6:26:01<br></strong>
   * <p>
   * @param siteCode
   * @param messageCode
   * @param messageUser
   * @param params
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void sendMessageToGivenUser(String siteCode, String messageCode, MessageUser messageUser, Map<String, String> params);
  /**
   * 
   * <strong>Title : sentMessage<br></strong>
   * <strong>Description : </strong>直接发送站内消息，不用事先配置消息代码<br> 
   * <strong>Create on : 2015-9-18 下午05:22:30<br></strong>
   * <p>
   * @param siteCode 工厂
   * @param message 消息
   * @param messageUser 消息用户
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void sentMessage(String siteCode, String message, MessageUser messageUser);

  /**
   * 根据消息代码查询消息
   * @param messageCode
   * @return
   */
  MessageConfigInfo selectMessageConfig(String siteCode, String messageCode);

  /**
   * 
   * <strong>Title : selectMessageConfigList<br></strong>
   * <strong>Description : </strong>查询消息配置列表<br> 
   * <strong>Create on : 2015-9-16 上午10:30:24<br></strong>
   * <p>
   * @param messageConfigCondition
   * @return
   * List<MessageConfigInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<MessageConfigInfo> selectMessageConfigList(MessageConfigCondition messageConfigCondition);

  /**
   * 
   * <strong>Title : selectMessageConfigCount<br></strong>
   * <strong>Description : </strong>查询消息配置数量<br> 
   * <strong>Create on : 2015-9-16 上午10:30:48<br></strong>
   * <p>
   * @param messageConfigCondition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectMessageConfigCount(MessageConfigCondition messageConfigCondition);

  /**
   * 新建消息
   * @param messageConfigInfo
   */
  void insertMessageConfig(MessageConfigInfo messageConfigInfo);

  /**
   * 更新消息
   * @param messageConfigInfo
   */
  void updateMessageConfig(MessageConfigInfo messageConfigInfo);

  /**
   * 删除消息
   * @param messageCode
   */
  void deleteMessageConfig(String siteCode, String messageCode);

  /**
   * 
   * <strong>Title : selectHisInstantMessageList<br></strong>
   * <strong>Description : 查询历史消息列表<br> 
   * <strong>Create on : 2015-9-15 下午04:29:43<br></strong>
   * <p>
   * @param instantMessageCondition
   * @return
   * List<InstantMessageInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<InstantMessageInfo> selectHisInstantMessageList(InstantMessageCondition instantMessageCondition);

  /**
   * 设置为已读
   * @param messageId
   */
  void doMarkAsRead(long messageId);

  /**
   * 查询是否存在未读消息
   * @param userCode
   * @return
   */
  int selectUnReadMessageCount(String siteCode, String userCode);

  /**
   * 
   * @Title: selectAllLanguage
   *
   * @Description:  查询全部系统语言
   * @return List<MessageContentInfo> 
   * @throws
   * @author zhaoxin
   * @date   2012-10-29 上午09:59:14
   */
  List<MessageContentInfo> selectAllLanguage();

  /**
   * 
   * @Title: selectContentListByMessageCode
   *
   * @Description: 根据消息代码查询全部语言内容
   * @param messageCode
   * @return List<MessageContentInfo> 
   * @throws
   * @author zhaoxin
   * @date   2012-10-30 下午01:48:49
   */
  List<MessageContentInfo> selectContentListByMessageCode(String siteCode, String messageCode);

  /**
   * 
   * <strong>Title : selectUnReadMeaage<br></strong>
   * <strong>Description : </strong>查询未读消息<br> 
   * <strong>Create on : 2015-9-14 下午01:44:29<br></strong>
   * <p>
   * @return
   * List<InstantMessageInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<InstantMessageInfo> selectUnReadMeaage(InstantMessageCondition instantMessageCondition);

  /**
   * 
   * <strong>Title : selectInstantMessageById<br></strong>
   * <strong>Description : </strong>根据ID查询即时消息<br> 
   * <strong>Create on : 2015-9-15 下午01:56:52<br></strong>
   * <p>
   * @param id
   * @return
   * InstantMessageInfo
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  InstantMessageInfo selectInstantMessageById(long id);

  /**
   * 
   * <strong>Title : selectHisInstantMessageCount<br></strong>
   * <strong>Description : </strong>查询历史消息数量<br> 
   * <strong>Create on : 2015-9-15 下午04:29:35<br></strong>
   * <p>
   * @param instantMessageCondition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectHisInstantMessageCount(InstantMessageCondition instantMessageCondition);

  /**
   * 
   * <strong>Title : selectMessageReceiver<br></strong>
   * <strong>Description : </strong>查询接收人<br> 
   * <strong>Create on : 2015-9-17 下午09:23:01<br></strong>
   * <p>
   * @param messageCode
   * @return
   * List<MessageReceiverInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<MessageReceiverInfo> selectMessageReceiver(String siteCode, String messageCode);

  /**
   * 
   * <strong>Title : sendMessageOnlyUseTemplate<br></strong>
   * <strong>Description : </strong>通过消息模板给指定用户发送消息(不使用模板内预置的用户)<br> 
   * <strong>Create on : 2015-12-4 下午05:14:12<br></strong>
   * <p>
   * @param siteCode 工厂编码
   * @param messageCode 消息编码
   * @param paramrters 参数列表
   * @param messageUser 消息用户
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void sendMessageOnlyUseTemplate(String siteCode, String messageCode, Object[] paramrters,
                                         MessageUser messageUser);

}
